Skip to content

Latest commit

 

History

History
76 lines (53 loc) · 2 KB

File metadata and controls

76 lines (53 loc) · 2 KB

이터레이터 패턴은 컬렉션 구현 방법을 노출시키지 않으면서 집합체 안에 들어있는 모든 항목에 접근할 수 있도록 하는 패턴이다. java의 stream이 대표적인 이터레이터 패턴의 예시이다.


예시 코드

@RequiredArgsConstructor
public class ArrIterator implements Iterator<Integer> {

    private final Integer[] list;
    private int position = 0;

    @Override
    public boolean hasNext() {
        return position < list.length;
    }

    @Override
    public Integer next() {
        return list[position++];
    }
}

@RequiredArgsConstructor
public class ListIterator implements Iterator<Integer> {

    private final List<Integer> list;
    private int position = 0;

    @Override
    public boolean hasNext() {
        return position < list.size();
    }

    @Override
    public Integer next() {
        return list.get(position++);
    }
}

java.util의 Iterator를 상속받았고 각각 일반 배열, List를 가지고 있는 두개의 클래스를 만들었다.


public class App {

    public static void main(String[] args) {

        Integer[] arr = {1, 2, 3};
        ArrIterator iterator1 = new ArrIterator(arr);

        System.out.println("ArrIterator");
        while(iterator1.hasNext()){
            System.out.println(iterator1.next());
        }

        List<Integer> list = Arrays.asList(1, 2, 3);
        ListIterator iterator2 = new ListIterator(list);

        System.out.println("ListIterator");
        while(iterator2.hasNext()){
            System.out.println(iterator2.next());
        }
    }
}

ArrIterator와 ListIterator는 다른 타입의 Integer 목록을 가지고 있지만 인터페이스를 상속받아 구현한 hasNext()와 next()를 통해 동일한 방식으로 요소를 탐색할 수 있다.

링크로 가면 코드를 볼 수 있다.